package edu.nf.project.services.storeOperation;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import edu.nf.project.entitys.dto.storeOperation.CustomerOrderDetailsDTO;
import edu.nf.project.entitys.dto.storeOperation.OrderDTO;
import edu.nf.project.entitys.dto.storeOperation.OrderItemDTO;
import edu.nf.project.entitys.dto.storeOperation.COrder_ItemDTO;
import edu.nf.project.entitys.entity.storeOperation.convention.operate.CustomerOrder;
import edu.nf.project.entitys.entity.storeOperation.convention.operate.CustomerOrderItem;

import java.util.List;

/**
 * 订单服务接口
 */
public interface CustomerOrderService {
    /**
     * 创建新订单
     * @param order 订单信息
     * @return 新创建的订单主键ID
     */
    Integer createOrder(CustomerOrder order);


    /**
     * 创建订单+订单项信息
     *
     * @return
     */
    Integer createOrderAndItem(OrderDTO orderDTO);

    /**
     * 分页查询订单列表
     * @param page 分页参数
     * @param orderStatus 订单状态（可选）
     * @return 分页结果
     */
    Page<CustomerOrder> getOrderList(Page<CustomerOrder> page, Integer orderStatus);

    /**
     * 获取订单详细信息
     * @param orderId 订单ID
     * @return 订单信息
     */
    CustomerOrder getOrderInfo(Integer orderId);

    /**
     * 更新订单状态
     * @param orderId 订单ID
     * @param orderStatus 订单状态
     * @return 是否成功
     */
    boolean updateOrderStatus(Integer orderId, Integer orderStatus);

    /**
     * 获取指定区域的订单列表 (包含餐桌名和操作人名)
     * @param regionIds 区域ID数组
     * @return 订单详细信息列表
     */
    List<CustomerOrderDetailsDTO> getOrdersByRegion(Integer[] regionIds);

    /**
     * 获取指定订单的菜品列表（包含菜品详细信息）
     * @param orderId 订单ID
     * @return 订单菜品列表（包含菜品详细信息）
     */
    List<OrderItemDTO> getOrderItems(Integer orderId);

    /**
     * 获取指定订单的订单项（不包含详细信息）
     * @param orderId
     * @return
     */
    List<CustomerOrderItem> getItems(Integer orderId);

    /**
     * 获取指定日期的全部订单信息（包含订单和菜品信息）
     * @param date 指定日期，格式为 yyyy-MM-dd，如果为null则获取全部时间的订单
     * @return 订单和订单项信息列表
     */
    List<COrder_ItemDTO> getOrdersByDate(String date);

    /**
     * 获取可以退款的订单集合
     * @param uId
     * @return
     */
    List<CustomerOrder> listCanRefundOrder(Integer uId);
}